package com.zl.test.activiti;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

import org.springframework.web.bind.annotation.PathVariable;

import com.github.pagehelper.PageInfo;

public interface ActivitiService {

	//================ 流程部署 ======================
	/**
	 * 查询流程部署
	 * @return
	 */
	public PageInfo<Map<String,Object>> queryDeployments(String pdkey,int pageNum,int pageSize);
    
    /**
     * 删除流程部署
     * @param deployId
     */
	public void delDeployment(String deployId);
	
	/**
	 * 部署zip流程
	 */
	public void deployZip(String name,String category,ZipInputStream zipStream);
	
	/**
	 * 部署bpmn流程
	 */
	public void deployBpmn(String name,String category,InputStream bpmnStream,String resourceName);
	
	//================ 流程定义 ======================
	/**
	 * 查询流程定义
	 * @return
	 */
	public PageInfo<Map<String,Object>> queryDefinitions(String pdkey,int pageNum,int pageSize);
    
    /**
     * 挂起或激活流程定义
     * @param defineid
     * @param suspend	是否挂起流程 true:是,false:否
     */
	public void suspendDefinition(String defineid,boolean suspend);
	
	/**
	 * 获取流程图文件流
	 * @param defineid
	 * @return
	 */
    public OutputStream processDiagram(String defineid);
    
    //================ 流程实例 ======================
    
    /**
	 * 查询流程实例
	 * @return
	 */
	public PageInfo<Map<String,Object>> queryInstance(String pdkey,int pageNum,int pageSize);
    
    /**
     * 获取流程实例
     * @param pid
     * @return
     */
    public Map<String,Object> getInstance(String pid);
    
    /**
     * 查询流程任务
     * @param pid
     * @return
     */
    public List<Map<String,Object>> queryTasks(String pid);
    
    /**
     * 挂起或激活流程实例
     * @param pid
     * @return
     */
	public void suspendInstance(String pid,boolean suspend);

	/**
	 * 删除流程实例
	 * @param pid
	 * @return
	 */
	public void delete(String pid,String deleteReason);
	
    //================ 流程历史 ======================
	
	/**
	 * 查询流程实例
	 * @return
	 */
	public PageInfo<Map<String,Object>> queryHistoryInstance(String pdkey,int pageNum,int pageSize);
    
    /**
     * 获取历史流程实例
     * @param pid
     * @return
     */
    public Map<String,Object> getHistoryInstance(String pid);
    
    /**
     * 查询历史任务
     * @param pid
     * @return
     */
    public List<Map<String,Object>> queryHistoryTask(String pid);
    
	/**
	 * 删除历史流程实例
	 * @param pid
	 * @return
	 */
	public void deleteHistoryInstance(@PathVariable String pid);
	
	//================ 流程处理 ======================
	
}
